﻿
namespace FastFood.Windows.Forms.Administracion.Otros
{
    using System;
    using System.Collections.Generic;
    using System.Data.Linq;
    using System.Linq;
    using System.Windows.Forms;
    using FastFood.Business.Entities;
    using FastFood.Business.Logic;
    using FastFood.Windows.Helpers;

    public partial class CwfAlmacenes : UserControl
    {
        public EstadoActual estadoActual;

        public CwfAlmacenes()
        {
            if (!DesignMode)
            {
                InitializeComponent();
            }
        }

        private void CwfEmpleados_Load(object sender, EventArgs e)
        {
            if (!DesignMode)
            {
                this.TsMenu.FormularioID = Convert.ToByte(this.Tag);
                this.TsMenu.LoadPermisos();
                ClearControls();
                InitialLoad();
                EnabledControls(true);
                EnabledButtons(true);
            }
        }

        private void Focus_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter))
            {
                e.Handled = true;
                SendKeys.Send("{TAB}");
            }
        }

        private void TsbNuevo_Click(object sender, EventArgs e)
        {
            this.estadoActual = EstadoActual.Nuevo;
            EnabledControls(false);
            EnabledButtons(false);
            ClearControls();
            this.txtAlmacenID.Enabled = true;
            this.txtAlmacenID.Focus();
            this.almacenesBindingSource.AddNew();
        }

        private void TsbEditar_Click(object sender, EventArgs e)
        {
            this.estadoActual = EstadoActual.Editar;
            EnabledControls(false);
            EnabledButtons(false);
            this.txtAlmacenID.Enabled = false;
            this.txtNombre.Focus();
        }

        private void TsbEliminar_Click(object sender, EventArgs e)
        {
            if (Mensaje.ShowMessageConfirm(this.ParentForm, Constantes.Titulo, "¿Desea eliminar el Registro?") == DialogResult.Yes)
            {
                this.estadoActual = EstadoActual.Eliminar;
                SaveData();
                this.estadoActual = EstadoActual.Normal;
                if (this.almacenesBindingSource.Current != null)
                {
                    LoadAlmacenes(this.almacenesBindingSource.Current as Almacenes);
                }
            }
        }

        private void TsbGuardar_Click(object sender, EventArgs e)
        {
            if (ValidateData())
            {
                if (SaveData())
                {
                    this.estadoActual = EstadoActual.Normal;
                    if (this.almacenesBindingSource.Current != null)
                    {
                        LoadAlmacenes(this.almacenesBindingSource.Current as Almacenes);
                    }
                    EnabledControls(true);
                    EnabledButtons(true);
                    this.dgvAlmacenes.Focus();
                }
            }
        }

        private void TsbCancelar_Click(object sender, EventArgs e)
        {
            if (this.estadoActual == EstadoActual.Nuevo)
            {
                ClearControls();
            }
            this.estadoActual = EstadoActual.Normal;
            EnabledControls(true);
            EnabledButtons(true);
            this.almacenesBindingSource.CancelEdit();
            this.dgvAlmacenes.Focus();
        }

        private void dgvPersonas_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1 && e.ColumnIndex != -1)
            {
                if (this.estadoActual == EstadoActual.Normal)
                    LoadAlmacenes(this.almacenesBindingSource.Current as Almacenes);
            }
        }

        private void dgvPersonas_KeyDown(object sender, KeyEventArgs e)
        {
            if (this.estadoActual != EstadoActual.Normal) return;
            if (e.KeyCode == Keys.Delete)
            {
                if (this.dgvAlmacenes.SelectedRows.Count != 0)
                {
                    if (Mensaje.ShowMessageConfirm(this.ParentForm, Constantes.Titulo, "¿Desea eliminar el Registro?") == DialogResult.No)
                    {
                        e.Handled = true;
                    }
                    else
                    {
                        this.estadoActual = EstadoActual.Eliminar;
                        SaveData();
                        this.estadoActual = EstadoActual.Normal;
                        if (this.almacenesBindingSource.Current != null)
                        {
                            LoadAlmacenes(this.almacenesBindingSource.Current as Almacenes);
                        }
                    }
                }
            }
        }

        private void InitialLoad()
        {
            AlmacenesManager almacenCn = new AlmacenesManager();
            try
            {
                this.almacenesBindingSource.DataSource = almacenCn.Listar();
                this.almacenesBindingNavigator.BindingSource = this.almacenesBindingSource;
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, Constantes.Titulo, ex.Message);
            }
        }

        private void LoadAlmacenes(Almacenes almacen)
        {
            this.txtAlmacenID.Text = almacen.almacenID.ToString();
            this.txtNombre.Text = almacen.nombre;
            this.txtDescripcion.Text = almacen.descripcion;
        }

        private bool SaveData()
        {
            bool result = false;
            AlmacenesManager almacenCn = new AlmacenesManager();
            try
            {
                switch (this.estadoActual)
                {
                    case EstadoActual.Nuevo:
                        almacenCn.Agregar(GetAlmacenes());
                        break;
                    case EstadoActual.Editar:
                        almacenCn.Modificar(GetAlmacenes());
                        break;
                    case EstadoActual.Eliminar:
                        almacenCn.Eliminar(Convert.ToInt16(this.txtAlmacenID.Text));
                        this.almacenesBindingSource.RemoveCurrent();
                        break;
                }

                this.almacenesBindingSource.EndEdit();
                result = true;
                InitialLoad();
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, Constantes.Titulo, ex.Message);
            }
            return result;
        }

        private Almacenes GetAlmacenes()
        {
            Almacenes almacen = new Almacenes
            {
                almacenID = Convert.ToInt16(this.txtAlmacenID.Text),
                nombre = this.txtNombre.Text,
                descripcion = this.txtDescripcion.Text
            };
            return almacen;
        }

        private bool ValidateData()
        {
            bool result = true;

            if (string.IsNullOrEmpty(this.txtAlmacenID.Text))
            {
                this.errValidator.SetError(this.txtDescripcion, "Ingresar Numero de Almacen.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.txtDescripcion, string.Empty);
            }

            if (string.IsNullOrEmpty(this.txtNombre.Text))
            {
                this.errValidator.SetError(this.txtNombre, "Ingresar Nombre.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.txtNombre, string.Empty);
            }

            return result;
        }

        private void EnabledControls(bool valor)
        {
            this.gbxInformacion.Enabled = !valor;
            this.almacenesBindingNavigator.Enabled = valor;
            this.dgvAlmacenes.Enabled = valor;
        }

        private void EnabledButtons(bool valor)
        {
            this.TsMenu.EnabledNuevo = valor;
            this.TsMenu.EnabledEditar = valor;
            this.TsMenu.EnabledEliminar = valor;

            if (this.estadoActual == EstadoActual.Nuevo ||
                this.estadoActual == EstadoActual.Editar)
            {
                this.TsMenu.EnabledGuardar = true;
                this.TsMenu.EnabledCancelar = true;
                this.dgvAlmacenes.Enabled = false;
            }
            else
            {
                this.TsMenu.EnabledGuardar = false;
                this.TsMenu.EnabledCancelar = false;
                this.dgvAlmacenes.Enabled = true;
            }
        }

        private void ClearControls()
        {
            this.txtAlmacenID.Text = "0";
            this.txtNombre.Text = string.Empty;
            this.txtDescripcion.Text = string.Empty;
            this.txtAlmacenID.Text = string.Empty;
            this.errValidator.Clear();
        }
    }
}
